package ai.zixing.mashibing.new_class.class01;

public class Code07_SelectionSort {
    public static void main(String[] args) {
        int[] arr = {7, 1, 3, 5, 1, 6, 8, 1, 3, 7, 6, 4};
        printArray(arr);
        selectSort(arr);
//        bubbleSort(arr);
        insertSort2(arr);
        printArray(arr);
    }

    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
    public static void selectSort(int[] arr) {
        // 先想边际条件
        if (arr == null || arr.length < 2) {
            return;
        }
        int len = arr.length;
        // 0 ~ n -1
        // 1 ~ n -1
        // 2 ~ n -1
        for (int i = 0; i < len; i++) {
            int minValueIndex = i;
            // 0 ~ n -1
            // 1 ~ n -1
            // 2 ~ n -1
            // i~ n -1
            for (int j = i + 1; j < len; j++) {
                minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
            }
            swap(arr, i, minValueIndex);
        }
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }


    // 冒泡排序
    public static void bubbleSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        int len = arr.length;
        for (int end = len - 1; end >= 0; end--) {
            for (int i = 0; i < end; i++) {
                if (arr[i] > arr[i + 1]) {
                    swap(arr, i, i + 1);
                }
            }
        }
    }

    // 插入排序
    public static void insertSort2(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        int len = arr.length;
        for (int i = 0; i < len; i++) {
            int newNumIndex = i + 1;
            while (newNumIndex < len && arr[i] > arr[newNumIndex]) {
                swap(arr, i, newNumIndex);
                newNumIndex++;
            }
        }
    }

}
